/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.anggaranpendapatanformulirpmb;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.common.ClassConnection;
import org.sadhar.sia.common.ClassUtility;

/**
 * 
 * @author Yohan Hardinugroho
 */
public class AnggaranPendapatanFormulirPMBDAOImpl implements
        AnggaranPendapatanFormulirPMBDAO {

    public AnggaranPendapatanFormulirPMBDAOImpl() {
        ClassConnection.getTransactionProxyFactoryBean().setTarget(this);
    }

    public List<AnggaranPendapatanFormulirPMB> list() throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public AnggaranPendapatanFormulirPMB select(int id) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<Map> listDetailOrderByGelombang() throws Exception {
        String sql = "SELECT a.kodeGelombangPMB,a.jumlahFormulirYangTerjual,a.harga,a.tahun,g.kd_gelombang,g.nm_gelombang, " + " g.aktifasi,g.kelompok  FROM ppmk.anggaranPendapatanFormulirPMB a " + " inner join kamus.gelombang g on (a.kodeGelombangPMB = g.kd_gelombang) " + " order by a.kodeGelombangPMB, a.tahun";

        List<Map> result = ClassConnection.getJdbc().queryForList(sql);
        String currentNamaGelombang = "";
        for (Map m : result) {

            if (currentNamaGelombang.equalsIgnoreCase(m.get("nm_gelombang").toString())) {
                m.put("nm_gelombang", "");
                m.put("nm_gelombangHidden", currentNamaGelombang);
            } else {
                currentNamaGelombang = m.get("nm_gelombang").toString();
                m.put("nm_gelombangHidden", "");
            }
        }
        return result;
    }

    @Override
    public List<Map> listDetailOrderByTahun() throws Exception {
        String sql = "SELECT a.kodeGelombangPMB,a.jumlahFormulirYangTerjual,a.harga,a.tahun,g.kd_gelombang,g.nm_gelombang, " + " g.aktifasi,g.kelompok  FROM ppmk.anggaranPendapatanFormulirPMB a " + " inner join kamus.gelombang g on (a.kodeGelombangPMB = g.kd_gelombang) " + " order by a.tahun, a.kodeGelombangPMB";

        List<Map> result = ClassConnection.getJdbc().queryForList(sql);
        String currentTahun = "";
        for (Map m : result) {

            if (currentTahun.equalsIgnoreCase(m.get("tahun").toString())) {
                m.put("tahun", "");
                m.put("tahunHidden", currentTahun);
            } else {
                currentTahun = m.get("tahun").toString();
                m.put("tahunHidden", "");
            }
        }
        return result;
    }

    @Override
    public List<String> listTahun() throws Exception {
        String sql = "SELECT a.tahun FROM ppmk.anggaranPendapatanFormulirPMB a group by a.tahun";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql);
        List<String> resultString = new ArrayList<String>();
        for (Map m : result) {
            resultString.add(ClassAntiNull.AntiNullString(m.get("tahun")));
        }
        return resultString;
    }

    @Override
    public List<String> listTahun(String mulai, String sampai) throws Exception {
        String sql = "SELECT a.tahun FROM ppmk.anggaranPendapatanFormulirPMB a where a.tahun>=? and a.tahun <=? group by a.tahun";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{mulai, sampai});
        List<String> resultString = new ArrayList<String>();
        for (Map m : result) {
            resultString.add(ClassAntiNull.AntiNullString(m.get("tahun")));
        }
        return resultString;
    }

    @Override
    public List<Map> listDetailByGelombangOByGelombang(String kodeGelombang) {
        String sql = "SELECT a.kodeGelombangPMB,a.jumlahFormulirYangTerjual,a.harga,a.tahun,g.kd_gelombang,g.nm_gelombang, " + " g.aktifasi,g.kelompok  FROM ppmk.anggaranPendapatanFormulirPMB a " + " inner join kamus.gelombang g on (a.kodeGelombangPMB = g.kd_gelombang) " + " where a.kodeGelombangPMB = ? order by a.kodeGelombangPMB, a.tahun";

        List<Map> result = ClassConnection.getJdbc().queryForList(sql,
                new Object[]{ClassUtility.quote(kodeGelombang)});
        String currentNamaGelombang = "";
        for (Map m : result) {

            if (currentNamaGelombang.equalsIgnoreCase(m.get("nm_gelombang").toString())) {
                m.put("nm_gelombang", "");
                m.put("nm_gelombangHidden", currentNamaGelombang);
            } else {
                currentNamaGelombang = m.get("nm_gelombang").toString();
                m.put("nm_gelombangHidden", "");
            }
        }
        return result;
    }

    @Override
    public List<Map> listDetailByGelombangOByTahun(String kodeGelombang) {
        String sql = "SELECT a.kodeGelombangPMB,a.jumlahFormulirYangTerjual,a.harga,a.tahun,g.kd_gelombang,g.nm_gelombang, " + " g.aktifasi,g.kelompok  FROM ppmk.anggaranPendapatanFormulirPMB a " + " inner join kamus.gelombang g on (a.kodeGelombangPMB = g.kd_gelombang) " + " where a.kodeGelombangPMB = ? order by a.tahun,a.kodeGelombangPMB";

        List<Map> result = ClassConnection.getJdbc().queryForList(sql,
                new Object[]{ClassUtility.quote(kodeGelombang)});
        String currentTahun = "";
        for (Map m : result) {

            if (currentTahun.equalsIgnoreCase(m.get("tahun").toString())) {
                m.put("tahun", "");
                m.put("tahunHidden", currentTahun);
            } else {
                currentTahun = m.get("tahun").toString();
                m.put("tahunHidden", "");
            }
        }
        return result;
    }

    @Override
    public List<Map> listDetails(String kodeGelombang, String tahunMulai,
            String tahunSampai, boolean byTahun) {
        String sql = "SELECT a.kodeGelombangPMB,a.jumlahFormulirYangTerjual,a.harga,a.tahun,g.kd_gelombang,g.nm_gelombang, " + " g.aktifasi,g.kelompok  FROM ppmk.anggaranPendapatanFormulirPMB a " + " inner join kamus.gelombang g on (a.kodeGelombangPMB = g.kd_gelombang) ";
        List<Object> params = new ArrayList<Object>();
        if (kodeGelombang != null) {
            if (!kodeGelombang.trim().equalsIgnoreCase("")) {
                sql = sql + " where a.kodeGelombangPMB = ? ";
                params.add(kodeGelombang);
            }
        }

        if (!tahunMulai.trim().equalsIgnoreCase("")) {
            if (params.size() > 0) {
                sql = sql + " and ";
            } else {
                sql = sql + " where ";
            }
            sql = sql + " a.tahun >= ? ";
            params.add(tahunMulai);
        }

        if (!tahunSampai.trim().equalsIgnoreCase("")) {
            if (params.size() > 0) {
                sql = sql + " and ";
            } else {
                sql = sql + " where ";
            }
            sql = sql + " a.tahun <= ? ";
            params.add(tahunSampai);
        }

        if (byTahun) {
            sql = sql + " order by a.tahun,a.kodeGelombangPMB";
        } else {
            sql = sql + " order by a.kodeGelombangPMB,a.tahun";
        }

        List<Map> result = ClassConnection.getJdbc().queryForList(sql,
                params.toArray());
        if (byTahun) {
            String currentTahun = "";
            for (Map m : result) {

                if (currentTahun.equalsIgnoreCase(m.get("tahun").toString())) {
                    m.put("tahun", "");
                    m.put("tahunHidden", currentTahun);
                } else {
                    currentTahun = m.get("tahun").toString();
                    m.put("tahunHidden", "");
                }
            }
        } else {
            String currentNamaGelombang = "";
            for (Map m : result) {

                if (currentNamaGelombang.equalsIgnoreCase(m.get("nm_gelombang").toString())) {
                    m.put("nm_gelombang", "");
                    m.put("nm_gelombangHidden", currentNamaGelombang);
                } else {
                    currentNamaGelombang = m.get("nm_gelombang").toString();
                    m.put("nm_gelombangHidden", "");
                }
            }
        }
        return result;
    }

    @Override
    public String listDetailSql(String kodeGelombang, String tahunMulai,
            String tahunSampai, boolean byTahun) {
        String sql = "SELECT a.kodeGelombangPMB,a.jumlahFormulirYangTerjual,a.harga,a.tahun,g.kd_gelombang,g.nm_gelombang, " + " g.aktifasi,g.kelompok  FROM ppmk.anggaranPendapatanFormulirPMB a " + " inner join kamus.gelombang g on (a.kodeGelombangPMB = g.kd_gelombang) ";
        int param = 0;
        if (kodeGelombang != null) {
            if (!kodeGelombang.trim().equalsIgnoreCase("")) {
                sql = sql + " where a.kodeGelombangPMB =  " + kodeGelombang + " ";
                param++;
            }
        }

        if (!tahunMulai.trim().equalsIgnoreCase("")) {
            if (param > 0) {
                sql = sql + " and ";
            } else {
                sql = sql + " where ";
            }
            sql = sql + " a.tahun >=  " + tahunMulai + " ";
            param++;
        }

        if (!tahunSampai.trim().equalsIgnoreCase("")) {
            if (param > 0) {
                sql = sql + " and ";
            } else {
                sql = sql + " where ";
            }
            sql = sql + " a.tahun <=  " + tahunSampai + " ";
            param++;
        }

        if (byTahun) {
            sql = sql + " order by a.tahun,a.kodeGelombangPMB";
        } else {
            sql = sql + " order by a.kodeGelombangPMB,a.tahun";
        }
        return sql;
    }
}
